import os
import logging
from logging.handlers import RotatingFileHandler
from pathlib import Path
import datetime

class Logger:
    """日志管理类，提供统一的日志记录功能"""
    
    def __init__(self, name: str, base_dir: Path, level: str = 'INFO',
                 max_size: int = 10*1024*1024, backup_count: int = 5,
                 filename_format: str = '%Y%m%d.log'):
        """初始化日志管理器
        
        Args:
            name: 日志记录器名称
            base_dir: 基础目录路径
            level: 日志级别 (DEBUG, INFO, WARNING, ERROR, CRITICAL)
            max_size: 日志文件最大大小（字节）
            backup_count: 保留的日志文件数量
            filename_format: 日志文件名格式
        """
        self.name = name
        self.logger = logging.getLogger(name)
        
        # 设置日志级别
        level = getattr(logging, level.upper(), logging.INFO) # type: ignore
        self.logger.setLevel(level)
        
        # 创建日志目录
        log_dir = Path(base_dir)
        log_dir.mkdir(parents=True, exist_ok=True)
        
        # 生成日志文件名
        timestamp = datetime.datetime.now().strftime(filename_format)
        if not timestamp.endswith('.log'):
            timestamp += '.log'
        log_file = log_dir / f"{name}_{timestamp}"
        
        # 创建文件处理器
        file_handler = RotatingFileHandler(
            log_file,
            maxBytes=max_size,
            backupCount=backup_count,
            encoding='utf-8'
        )
        file_handler.setLevel(level)
        
        # 创建控制台处理器
        console_handler = logging.StreamHandler()
        console_handler.setLevel(level)
        
        # 设置日志格式
        formatter = logging.Formatter(
            '%(asctime)s - %(name)s - %(levelname)s - %(message)s'
        )
        file_handler.setFormatter(formatter)
        console_handler.setFormatter(formatter)
        
        # 清除现有的处理器
        self.logger.handlers.clear()
        
        # 添加处理器
        self.logger.addHandler(file_handler)
        self.logger.addHandler(console_handler)
        
        # 防止日志传递到父记录器
        self.logger.propagate = False
        
    def debug(self, message: str):
        """记录调试级别日志"""
        self.logger.debug(message)
        
    def info(self, message: str):
        """记录信息级别日志"""
        self.logger.info(message)
        
    def warning(self, message: str):
        """记录警告级别日志"""
        self.logger.warning(message)
        
    def error(self, message: str):
        """记录错误级别日志"""
        self.logger.error(message)
        
    def critical(self, message: str):
        """记录严重错误级别日志"""
        self.logger.critical(message)
 